#include<bits/stdc++.h>
using namespace std;
const int N=(1<<20)+100;
using ll=long long;
using ul=unsigned long long;
using vt=vector<int>;
int T,n,m,K,a[N],b[N],bt,c[N],ans,q[N],de[N];
bitset<1005>g[1005],vs;
vt lk[N],rk[N];
namespace sol1{
    struct dat{
        int l,r;
        void operator+=(const dat &z){
            l=min(l,z.l),r=max(r,z.r);
        }
    }d[N];
    void dfs(int x,int y){
        if(x>K){
            int i;
            for(x=1;x<=n;++x)
                if(vs[x])d[x]={x,x};
                else d[x]={N,-N};
            for(x=1;x<=n;++x)c[x]=0;
            if(!vs[1])c[1]=1;
            for(i=1;i<=n;++i){
                x=q[i];if(vs[x])c[x]=0;
                if(c[x])for(int y:lk[x])c[y]=1;
                for(int y:lk[x])d[y]+=d[x];
            }
            for(i=1;i<=m;++i){
                if(c[a[i]])return;
                if(d[a[i]].l!=d[a[i]].r)return;
            }
            ++ans;return;
        }
        if(y>bt)return;
        dfs(x,y+1);
        vs[b[y]]=1,dfs(x+1,y+1);
        vs[b[y]]=0;
    }
    void run(){
        int i,j,k,l,r,x,y,z;
        while(m--){
            cin>>x>>y,g[x][y]=1;
            lk[x].push_back(y),++c[y];
        }
        for(k=1;k<=n;++k)
            for(i=1;i<=n;++i)
                if(g[i][k])g[i]|=g[k];
        for(x=1;x<=n;++x)g[x][x]=1;
        for(x=1,ans=0;x<=n;++x)vs[x]=0;
        q[l=r=1]=1;
        while(l<=r){
            x=q[l++];
            for(int y:lk[x])
                if(!--c[y])q[++r]=y;
        }
        while(T--){
            cin>>K>>m;ans=0;
            for(x=1;x<=m;++x){
                cin>>a[x];
                for(y=1;y<=n;++y)
                    if(g[y][a[x]])vs[y]=1;
            }
            for(x=1,bt=0;x<=n;++x)
                if(vs[x])b[++bt]=x;
            for(x=1;x<=n;++x)vs[x]=0;
            dfs(1,1);
            printf("%d\n",ans);
        }
        exit(0);
    }
}
namespace LCT{
    int t[N][2],f[N];
#define tp(x) (t[f[x]][1]==x)
#define in(x) (t[f[x]][0]==x||tp(x))
#define ls t[x][0]
#define rs t[x][1]
    void rot(int x){
        int y=f[x],k=tp(x),w=t[x][!k];
        t[f[w]=t[x][!k]=y][k]=w;
        if(in(y))t[f[y]][tp(y)]=x;
        f[x]=f[y],f[y]=x;
    }
    void splay(int x){
        for(int y=f[x];in(x);rot(x),y=f[x])
            if(in(y))rot(tp(x)^tp(y)?x:y);
    }
    int acs(int x){
        int y;for(y=0;x;x=f[y=x])
            splay(x),rs=y;
        return y;
    }
    int lca(int x,int y){
        acs(x);
        return acs(y);
    }
#undef in
}using LCT::lca;
int dfn[N],low[N],dlt,stk[N],tp;
ll h[N][5];
void dfs(int x){
    dfn[x]=++dlt;
    for(int y:lk[x])dfs(y);
    low[x]=dlt;
}
int in(int x,int y){
    return dfn[x]>=dfn[y]&&dfn[x]<=low[y];
}
void dp(int x,int k){
    if(!vs[x]){
        int i,j;
        h[x][0]=1;
        for(i=1;i<=K;++i)h[x][i]=0;
        for(int y:lk[x]){
            dp(y,de[y]-de[x]);
            for(i=K;i;--i){
                h[x][i]=0;
                for(j=1;j<=i;++j)
                    h[x][i]+=h[x][i-j]*h[y][j];
            }h[x][0]=0;
        }
    }else for(int i=0;i<=K;++i)h[x][i]=0;
    h[x][1]+=k;
}
int main(){
    ios::sync_with_stdio(false),cin.tie(0);
    freopen("lodge.in","r",stdin);
    freopen("lodge.out","w",stdout);
    int i,j,k,l,r,x,y,z;
    cin>>n>>m>>T;
    if(n<=10&&m<=20)sol1::run();
    while(m--){
        cin>>x>>y,++c[y];
        lk[x].push_back(y);
        rk[y].push_back(x);
    }
    q[l=r=1]=1;
    while(l<=r){
        x=q[l++];
        for(int y:lk[x])
            if(!--c[y])q[++r]=y;
    }
    for(x=1;x<=n;++x)lk[x].clear();
    for(i=2,de[1]=1;i<=n;++i){
        x=q[i],z=0;
        for(int y:rk[x])
            if(z)z=lca(y,z);
            else z=y;
        LCT::f[x]=z;
        lk[z].push_back(x);
        de[x]=de[z]+1;
    }dfs(1);
    for(x=1;x<=n;++x)lk[x].clear();
    while(T--){
        cin>>K>>m;
        for(x=1;x<=m;++x)cin>>a[x],vs[a[x]]=1;
        a[++m]=1;
        sort(a+1,a+m+1,[&](int x,int y){return dfn[x]<dfn[y];});
        for(i=1,k=m;i<k;++i)a[++m]=lca(a[i],a[i+1]);
        sort(a+1,a+m+1,[&](int x,int y){return dfn[x]<dfn[y];});
        m=unique(a+1,a+m+1)-a-1;
        for(i=1,tp=0;i<=m;++i){
            x=a[i];
            while(tp&&!in(x,stk[tp]))--tp;
            if(tp)lk[stk[tp]].push_back(x);
            stk[++tp]=x;
        }dp(1,1),printf("%lld\n",h[1][K]);
        for(x=1;x<=m;++x)vs[a[x]]=0,lk[a[x]].clear();
    }
    return 0;
}